package com.global.service;

import java.util.List;

import com.global.model.Grid;
import com.global.model.GridColumn;
import com.global.model.Report;
import com.global.model.Who;
import com.global.vo.BooleanResult;

/**
 * 配置Report相关信息的 Service
 * @author zhanglinye
 *
 */
public interface ReportDefinitionService {
	
	/**
	 * 注册（更新）报表配置信息
	 * @param rptx
	 * @return
	 */
	public Report registerOrUpdateReport(Report rptx);
	
	/**
	 * 批量注册（更新）报表配置信息
	 * @param list
	 * @return true 表示成功
	 */
	public boolean registerOrUpdateReportBatch(List<Report> reportList);
	
	/**
	 * 注册（更新）Grid配置信息
	 * @return
	 */
	public Grid registerOrUpdateGrid(Grid grid);
	
	/**
	 * 批量注册（更新）Grid配置信息
	 * @return true 表示成功
	 */
	public boolean registerOrUpdateGridBatch(List<Grid> gridList);
	
	/**
	 * 批量注册（更新）GridColumn配置信息
	 * @return true 表示成功
	 */
	public boolean registerOrUpdateGridColumnBatch(List<GridColumn> gridColumnList);
	
	/**
	 * 注册（更新）GridColumn配置信息
	 * <br/>
	 * <span style="color:red">
	 * 如果数据源字段是新增的，则在Grid中新增对应的GridColumn
	 * </span>
	 * @return true 表示成功
	 */
	public BooleanResult registerOrUpdateGridColumns(Grid grid, Who who);
	
	/**
	 * 返回所有报表
	 * @return List
	 */
	public List<Report> getReportList();
	
	/**
	 * 返回当前报表中的Grid清单
	 * @param report
	 * @return Grid清单(按照显示顺序升序排列)
	 */
	public List<Grid> getGridList(Report report);
	
	/**
	 * 返回当前Grid中的GridColumn清单(包括隐藏的栏位)
	 * @param grid
	 * @return GridColumn清单(按照显示顺序升序排列)
	 */
	public List<GridColumn> getAllGridColumnList(Grid grid);
	
	/**
	 * 检索出某个Grid中的GridColumn清单（不包括隐藏的）
	 * @param report
	 * @return GridColumn清单(按照显示顺序升序排列)
	 */
	public List<GridColumn> getDispalyGridColumnList(Grid grid);
	
	/**
	 * 删除Report
	 * @param report
	 * @return true 表示删除成功，参考{@link BooleanResult}
	 */
	public BooleanResult deleteReport(Report report);
	
	/**
	 * 删除Grid
	 * @param grid
	 * @return true 表示删除成功，参考{@link BooleanResult}
	 */
	public BooleanResult deleteGrid(Grid grid);
	
	/**
	 * 删除GridColumn
	 * @param gridColumn
	 * @return true 表示删除成功，参考{@link BooleanResult}
	 */
	public BooleanResult deleteGridColumn(GridColumn gridColumn);
}
